#coding:utf-8

import urllib
import urllib2
import random
import cookielib
import json
import urlparse
import sys

def wx_post(msg, user='ozCpLuEjVOfA8aJaEarSaWzN59fw'): 
    #构造登录数据
    data={'username':'xxxxxx',   #用户名
          'pwd':'xxxxxx', #加密后的密码
          'imgcode':'',
          'f':'json'
          }
    #Referer 很重要，不然会报错的
    header = [('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1'),('Referer','https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN')] 
    #构造cookie 
    cj = cookielib.LWPCookieJar()
    cookie_suppot = urllib2.HTTPCookieProcessor(cj)
    opener = urllib2.build_opener(cookie_suppot,urllib2.HTTPHandler)
    opener.addheaders = header
    urllib2.install_opener(opener)
    #登录
    request = urllib2.Request('https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN',urllib.urlencode(data))
    conn=opener.open(request)
    js = json.loads(conn.read())
    print js
    #获取令牌，可以从登录后的返回结果中获取，PS:因为这个字符串不是固定的，所以需要获取
    token = dict(urlparse.parse_qsl(js['redirect_url']))['token']
    print token
    #发送消息的URL
    url="https://mp.weixin.qq.com/cgi-bin/singlesend"
    cont = msg
    print user
    #构造发送信息的数据，使用POST方法
    data1={'type': '1',
           'content': cont,
           'tofakeid': user,  #接受消息的订阅人，可以从页面中获取
           'imgcode': '',
           'token': token,         #令牌
           'lang': 'zh_CN',
           'random': random.random(),   #小于1的随机数
           'mask': 'false',
           'f': 'json',
           'ajax': '1',
           't': 'ajax-response',
           }
    #发送消息
    qe = urllib2.Request(url,urllib.urlencode(data1))
    res = opener.open(qe)
    print res.read()
    
if __name__ == '__main__':
    tx_msg = 'Hello World!'
    wx_post(tx_msg)
